/*
 * PagEventosEvento.java
 * 
 * Projeto: Kruskal - SRAC
 * LEDS - Laboratório de Engenharia e Desenvolvimento de Software
 * IFES - Instituto Federal do Espírito Santo - Campus Serra.
 */
package srac.controleeventos.cih;

import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import org.zkoss.zul.Messagebox.ClickEvent;
import srac.controleeventos.cci.CtrlEvento;
import srac.controleeventos.cdp.Evento;
import srac.controleeventos.cdp.StatusEvento;

public class PagEventosEvento extends GenericForwardComposer {

    private CtrlEvento ctrl = CtrlEvento.getInstance();
    private Window winEventosEventos;
    private Listbox listEventos;
    private Div boxInformacao;
    private Label msg;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        ctrl.setPagEventosEvento(this);
        List<Evento> eventos = ctrl.obterEvento();
        if (eventos != null) {
            for (int i = 0; i < eventos.size(); i++) {
                Evento e = eventos.get(i);
                Listitem linha = new Listitem(eventos.get(i).getNome(), e);
                linha.appendChild(new Listcell(eventos.get(i).getTipo().toString()));
                linha.appendChild(new Listcell(eventos.get(i).getVagas().toString()));
                linha.appendChild(new Listcell(eventos.get(i).getStatusEvento().toString()));

                linha.setParent(listEventos);
            }
        }
    }

    public void onCreate$winEventosEvento(Event event) {
        //if feito para verificar se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (Executions.getCurrent().getSession().getAttribute("usuario") == null) {
            Executions.sendRedirect("/");
            winEventosEventos.detach();
        }
    }

    public void addEvento(Evento e) {
        Listitem linha = new Listitem(e.getNome(), e);
        linha.appendChild(new Listcell(e.getTipo().toString()));
        linha.appendChild(new Listcell(e.getVagas().toString()));
        linha.appendChild(new Listcell(e.getStatusEvento().toString()));
        linha.setParent(listEventos);
    }

    public void refreshEvento(Evento e) {
        for (int i = 0; i < listEventos.getItemCount(); i++) {
            if (listEventos.getItemAtIndex(i).getValue() == e) {
                listEventos.getItemAtIndex(i).getChildren().clear();
                listEventos.getItemAtIndex(i).appendChild(new Listcell(e.getNome()));
                listEventos.getItemAtIndex(i).appendChild(new Listcell(e.getTipo().toString()));
                listEventos.getItemAtIndex(i).appendChild(new Listcell(e.getVagas().toString()));
                listEventos.getItemAtIndex(i).appendChild(new Listcell(e.getStatusEvento().toString()));
                break;
            }
        }
    }

    public void onClick$excluirEvento(Event event) {
        Listitem listitem = listEventos.getSelectedItem();
        if (listitem != null) {
            eventoExcluir();
        }
        else
        {
            setMensagemAviso("info", "Selecione um evento");
        }
    }

    public void onClick$incluirEvento(Event event) {
        ctrl.abrirIncluirEvento();
    }
    public void onClick$encerrarEvento(Event event) {
        Listitem listitem = listEventos.getSelectedItem();
        if (listitem != null) {
            Evento e = (Evento) listEventos.getSelectedItem().getValue();
            if(e.getStatusEvento().equals(StatusEvento.Aberto))
            {
                eventoEncerrar();
            }
            else
            {
                setMensagemAviso("info", "Evento já encerrado!");
            }
        } else {
            setMensagemAviso("info", "Selecione um evento!");
        }
    }

    public void onClick$alterarEvento(Event event) {
        Listitem listitem = listEventos.getSelectedItem();
        if (listitem != null) {
            ctrl.abrirEditarEvento((Evento) listitem.getValue());
        } else {
            setMensagemAviso("info", "Selecione um evento");
        }
    }

    public void onClick$consultarEvento(Event event) {
        Listitem listitem = listEventos.getSelectedItem();
        if (listitem != null) {
            ctrl.abrirConsultarEvento((Evento) listitem.getValue());
        } else {
            setMensagemAviso("info", "Selecione um evento");
        }
    }

    public void setMensagemAviso(String tipo, String mensagem) {
        boxInformacao.setClass(tipo);
        boxInformacao.setVisible(true);
        msg.setValue(mensagem);
    }

    public void onClick$boxInformacao(Event event) {
        boxInformacao.setVisible(false);
    }
    
    public void eventoExcluir() //Método feito para a mensagem de confirmação de exclusão
    {
        Messagebox.Button b1 = Messagebox.Button.YES;       
        Messagebox.Button b2 = Messagebox.Button.NO;
        Messagebox.Button [] b = new Messagebox.Button[2];
        b[0] = b1;
        b[1] = b2;

        EventListener <ClickEvent> e = new EventListener() {
            @Override
            public void onEvent(Event evt) throws InterruptedException {
                if (evt.getName().equals("onYes")) {
                   Listitem listitem = listEventos.getSelectedItem();
                    try {
                        if (ctrl.apagarEvento((Evento) listitem.getValue())) {
                            listEventos.removeItemAt(listEventos.getSelectedIndex());
                            setMensagemAviso("success", "Evento excluido com sucesso");
                        } 
                        else {
                            setMensagemAviso("error", "Não foi possivel excluir o evento, já possui vinculos");
                        }
                    } 
                    catch (Exception e) {
                        setMensagemAviso("error", "Não foi possivel excluir o evento");
                    }
                }
            }
        };
        Messagebox.show("Deseja excluir a categoria?","Confirmação",b,Messagebox.QUESTION , e); //Mensagem de confirmação de exlusão
        
       
    }
    
    public void eventoEncerrar() //Metodo criado para exibir a msg de exclusão!
    {
        Messagebox.Button b1 = Messagebox.Button.YES;       
        Messagebox.Button b2 = Messagebox.Button.NO;
        Messagebox.Button [] b = new Messagebox.Button[2];
        b[0] = b1;
        b[1] = b2;

        EventListener <Messagebox.ClickEvent> e = new EventListener() { //Captura os eventos do mouse
            public void onEvent(Event evt) throws InterruptedException {
                if (evt.getName().equals("onYes")) { //Se o usuário clicar no botão de sim na popup
                    Listitem listitem = listEventos.getSelectedItem();
                    Evento e = (Evento) listitem.getValue();
                    ctrl.encerrarEvento(e);
                    refreshEvento(e);
                    
                }
            }
        };
        Messagebox.show("Deseja mesmo encerrar o evento?","Confirmação",b,Messagebox.QUESTION , e); //Mensagem de exclusão
    }
}
